// 定义Producer类，该类实现了Runnable接口以支持多线程运行。
public class Producer implements Runnable {

	// 私有成员变量tid表示生产者的标识（可能是线程ID或者名字）。
	private String tid;
	// 私有成员变量quantity表示生产者一次想要添加的产品数量。
	private int quantity;

	// 构造函数，初始化生产者的标识和添加产品的数量。
	public Producer(String tid, int quantity) {
		this.tid = tid;
		this.quantity = quantity;
	}

	// 公开的getTid方法，返回生产者的标识。
	public String getTid() {
		return tid;
	}

	// 公开的getQuantity方法，返回生产者一次添加的产品数量。
	public int getQuantity() {
		return quantity;
	}

	// 实现Runnable接口的run方法，在线程启动时调用。
	public void run() {
		produce();
	}

	// produce方法用于向Buffer类的静态队列中添加产品。
	public void produce(){
		// 同步块，锁定Buffer类的静态队列que，以防止多线程并发错误。
		synchronized (Buffer.que) {
			// 检查添加一个产品后是否会超出缓冲区的最大容量。
			while(Buffer.que.size() + 1 > Buffer.MAXSIZE){
				System.out.println(this.tid+" 添加产品 "+quantity+" 【失败】，此时缓冲池非空，还有产品 "+Buffer.que.size());
				try {
					Buffer.que.wait();  // 调用wait方法，使当前线程等待，直到其他线程调用notify或notifyAll。
				} catch (InterruptedException e) {
					e.printStackTrace(); // 打印中断异常堆栈信息。
				}
			}
			// 检查生产者想要添加的产品数量是否超出缓冲池的最大容量。
			if(quantity > Buffer.MAXSIZE) {
				System.out.println(this.tid+" 添加 "+quantity+"件产品【失败】，超出缓存池产品数量");
			} else {
				// 添加指定数量的产品到队列中。
				for (int i = 0; i < quantity; i++) {
					Buffer.que.add(new Object());
				}
				System.out.println(this.tid+" 添加 "+quantity+"件产品【成功】，此时缓冲池有产品： "+Buffer.que.size());
				Buffer.que.notifyAll();  // 通知所有等待队列的线程，队列已变动。
			}

		}
	}

}
